#ifndef GAMEENGINE_CORE_GRAPH_NODE_H
#define GAMEENGINE_CORE_GRAPH_NODE_H

#include <GameEngine/Core/core_settings.h>

#ifdef GAMEENGINE_NAMESPACES
namespace GameEngine {
#endif

//! Class in charge of representing a graph node
/*!
 *  A graph node can store a value of type T
 */
template <class T>
class GraphNode {

public:
	GraphNode();
	GraphNode(const T& value);
	GraphNode(const GraphNode& rhs);
	~GraphNode();
	GraphNode& operator=(const GraphNode& rhs);

	bool operator==(const GraphNode& rhs) const;
	bool operator!=(const GraphNode& rhs) const;
	bool operator<(const GraphNode& rhs) const;

	T& value();
	const T& value() const;

protected:
	//! Value associated to the node
	T value_;
};

#ifdef GAMEENGINE_NAMESPACES
} // namespace GameEngine
#endif

#include <GameEngine/Core/Graph/graph_node.hpp>

#endif
